package controller

import (
	"bluebell/logic"
	"bluebell/models"
	"strconv"

	"github.com/gin-gonic/gin"
	"go.uber.org/zap"
)

// GetHistoryListHandler 获取用户观看历史
// @Summary 获取用户观看历史
// @Description 获取用户观看帖子历史记录列表
// @Tags 历史记录相关接口
// @Accept application/json
// @Produce application/json
// @Param Authorization header string true "Bearer JWT"
// @Param page query int false "页码" default(1)
// @Param size query int false "每页数量" default(10)
// @Security ApiKeyAuth
// @Success 200 {object} models.GetHistoryListResponse
// @Success 400 {object} models.ResponseError "响应错误"
// @Success 500 {object} models.ResponseError "服务器错误"
// @Router /user/history [get]
func GetHistoryListHandler(c *gin.Context) {
	// 获取当前用户ID
	userID, err := getCurrentUserID(c)
	if err != nil {
		ResponseError(c, models.CodeNeedLogin)
		return
	}

	// 获取分页参数
	pageStr := c.DefaultQuery("page", "1")
	sizeStr := c.DefaultQuery("size", "10")

	page, err := strconv.ParseInt(pageStr, 10, 64)
	if err != nil || page <= 0 {
		page = 1
	}

	size, err := strconv.ParseInt(sizeStr, 10, 64)
	if err != nil || size <= 0 {
		size = 10
	} else if size > 50 {
		size = 50
	}

	// 调用逻辑层获取历史记录
	data, err := logic.GetUserPostHistoryList(userID, page, size)
	if err != nil {
		zap.L().Error("logic.GetUserPostHistoryList failed",
			zap.Int64("userID", userID),
			zap.Error(err))
		ResponseError(c, models.CodeServerBusy)
		return
	}

	ResponseSuccess(c, data)
}

// DeleteHistoryHandler 删除历史记录
// @Summary 删除历史记录
// @Description 删除用户的历史记录（可删除单条或清空所有）
// @Tags 历史记录相关接口
// @Accept application/json
// @Produce application/json
// @Param Authorization header string true "Bearer JWT"
// @Param body body models.DeleteHistoryRequest true "删除参数"
// @Security ApiKeyAuth
// @Success 200 {object} models.ResponseSuccess
// @Success 400 {object} models.ResponseError "响应错误"
// @Success 500 {object} models.ResponseError "服务器错误"
// @Router /user/history [delete]
func DeleteHistoryHandler(c *gin.Context) {
	// 获取当前用户ID
	userID, err := getCurrentUserID(c)
	if err != nil {
		ResponseError(c, models.CodeNeedLogin)
		return
	}

	// 解析请求参数
	var req models.DeleteHistoryRequest
	if err := c.ShouldBindJSON(&req); err != nil {
		zap.L().Error("DeleteHistoryHandler with invalid params", zap.Error(err))
		ResponseError(c, models.CodeInvalidParam)
		return
	}

	// 验证用户权限
	if req.UserID != 0 && req.UserID != userID {
		ResponseError(c, models.CodeInvalidPermission)
		return
	}

	// 调用逻辑层删除
	if req.HistoryID > 0 {
		// 删除单条记录
		err = logic.DeleteSingleHistory(req.HistoryID, userID)
	} else {
		// 清空用户所有历史记录
		err = logic.ClearUserHistory(userID)
	}

	if err != nil {
		zap.L().Error("DeleteHistoryHandler failed",
			zap.Int64("userID", userID),
			zap.Error(err))
		ResponseError(c, models.CodeServerBusy)
		return
	}

	ResponseSuccess(c, nil)
}
